#pragma once

#include "MxUtils\MxVersionInfo1.h"

#ifdef PluginICPopenCV_EXPORTS
#define PluginICPopenCV_API __declspec(dllexport)
#else
#define PluginICPopenCV_API __declspec(dllimport)
#endif

namespace PluginICPopenCVLib
{
	class PluginICPopenCV_API VerInfo
	{
	public:  

		bool		SetVersionInfo( HMODULE hModule = NULL) { return _VersionInfo.SetVersionInfo(hModule); }

		const wchar_t *GetwPathFilename() { return _VersionInfo.GetwPathFilename(); }		//filename returned by ::GetModuleFileName() of hModule in DllMain, DLL_PROCESS_ATTACH
		const char *GetProductName() {  return _VersionInfo.GetProductName(); }				//VS_VERSION_INFO::ProductName
		const char *GetDescription() {  return _VersionInfo.GetDescription();  }			//VS_VERSION_INFO::FileDescription
		const char *GetVersion() {  return _VersionInfo.GetVersion();  }					//VS_VERSION_INFO::ProductVersion
		const char *GetOwner() {  return _VersionInfo.GetOwner(); }							//VS_VERSION_INFO::CompanyName	
		const char *GetCopyrightNotice() {  return _VersionInfo.GetCopyrightNotice(); }		//VS_VERSION_INFO::LegalCopyright
		const char *GetProductID() {    return _VersionInfo.GetProductID(); }				//VS_VERSION_INFO::InternalName GUID - for a MxPlugin this is same as its folder name in PluginRootFolder	
		static void	CleanupOnAppExitOnly();

		static VerInfo& Inst()
		{
			static VerInfo    instance;			// Guaranteed to be destroyed. Instantiated on first use.
			return instance;
		}

	private:
		VerInfo();
		~VerInfo();
		VerInfo(VerInfo const&);					// Don't Implement
		void operator=(VerInfo const&);			// Don't implement

		MxVersionInfo _VersionInfo;
	};

}
